<?php
	require_once PATH_OBJECT.'dataObject.php';
	
class dataObject_sinistre extends dataObject
{    
	/* @desc    Identifiant du sinistre
     * @var     int
     */
    public $_IDENTIFIANT_SINISTRE  = 0;
	    
    
	/* @desc    type du sinistre
     * @var     char(5)
     */
    public $_TYPE_SINISTRE  = '';
	    
    
	/* @desc    Identifiant du sinistre
     * @var     date
     */
    public $_DATE_SURVENANCE_SINISTRE  = '';
	    
    
	/* @desc    Identifiant du sinistre
     * @var     date
     */
    public $_DATE_DECLARATION_SINISTRE  = '';
	    
    
	/* @desc    Identifiant du sinistre
     * @var     char(5)
     */
    public $_CAUSE_SINISTRE  = '';
	    
    
	/* @desc    Identifiant du sinistre
     * @var     enum('D', 'A', 'I')
     */
    public $_ETAT_SINISTRE  = '';
	    
    const ETAT_A_INSTRUIRE = 'A';
    const ETAT_INSTRUIT = 'I';
    const ETAT_DECLARE = 'D';
    
	/* @desc    Identifiant du sinistre
     * @var     enum('O', 'N')
     */
    public $_ELIGIBILITE_SINISTRE  = '';
	    
    
	/* @desc    Identifiant du sinistre
     * @var     enum('A', 'R')
     */
    public $_DECISION_PARTENAIRE_SINISTRE  = '';
	    
    
	/* @desc    Identifiant du sinistre
     * @var     char(5)
     */
    public $_MOTIF_REFUS_SINISTRE  = '';

    
	/* @desc    Identifiant du sinistre
     * @var     char(5)
     */
    public $_MODE_REGLEMENT_SINISTRE  = '';

    
	/* @desc    Identifiant du sinistre
     * @var     int
     */
    public $_IDENTIFIANT_CONTRAT  = NULL;
	    
    
	/* @desc    Identifiant du sinistre
     * @var     int
     */
    public $_IDENTIFIANT_PERSONNE  = NULL;
    
    
    
  public function __construct( $iId=0 )
    {
       parent::__construct();

       if ( $iId != 0 )
       {
            $sQuery = "SELECT   *   /*+ dataObject_sinistre::__construct */  
                       FROM sinistres 
            		   WHERE Identifiant_sinistre = ".$iId;
            
            $aRows =  self::$_oConnexion->query($sQuery);
	  		$aRow = $aRows[0];          

			$this->_IDENTIFIANT_SINISTRE = $iId;
			$this->_TYPE_SINISTRE 	= $aRow["Type_sinistre"];
			$this->_DATE_SURVENANCE_SINISTRE 	= self::showDate($aRow["Date_survenance_sinistre"]);
			$this->_DATE_DECLARATION_SINISTRE 	= self::showDate($aRow["Date_declaration_sinistre"]);
			$this->_CAUSE_SINISTRE 	= $aRow["Cause_sinistre"];
			$this->_ETAT_SINISTRE 	= $aRow["Etat_sinistre"];
			$this->_ELIGIBILITE_SINISTRE 	= $aRow["Eligibilite_sinistre"];
			$this->_DECISION_PARTENAIRE_SINISTRE 	= $aRow["Decision_partenaire_sinistre"];
			$this->_MOTIF_REFUS_SINISTRE 	= $aRow["Motif_refus_sinistre"];
			$this->_MODE_REGLEMENT_SINISTRE 	= $aRow["Mode_reglement_sinistre"];
			$this->_IDENTIFIANT_CONTRAT 	= $aRow["Identifiant_contrat"];
			$this->_IDENTIFIANT_PERSONNE 	= $aRow["Identifiant_personne"];

       }
    }
    /**
     * récupere la table sinistre selon le(s) criter(s) précisés ou pas 
	 */
    function sinistre_select( $sCritere = null )
    {
        $aRow = false;
    	$sQuery = "SELECT   *    
                   FROM sinistres 
            	   WHERE 1=1 
            	   {$sCritere}";
        $aRow =  self::$_oConnexion->query($sQuery);

        return $aRow;
    }
    
    
	public function sinistre_getList()
    {
        $aRow = false;
    	$sCritere = " and ";
        $aRow =  $this->sinistre_select ($sCritere);
        
        return $aRow;
    }
    
    //liste sinistrer en fonction de l'identifiant d'un contrat
    public function sinistre_getListSinistreContrat($sCritere)
    {
        $aRow = false;
    	$sQuery = "SELECT Identifiant_contrat,Identifiant_sinistre,Type_sinistre,Date_survenance_sinistre,
    				Nom_personne,Prenom_personne,Etat_sinistre      
                   FROM sinistres, personne
            	   WHERE personne.Identifiant_personne=sinistres.Identifiant_personne
            	  AND Identifiant_contrat="."'$sCritere'" 
            	   ;

        $aRow =  self::$_oConnexion->query($sQuery);

        return $aRow;
    }
    
public function sinistre_getSinistreContratPersonne($idContrat, $idPersonne)
    {
        $aRow = false;
    	$sQuery = "SELECT Identifiant_contrat, 
    					  Identifiant_sinistre, Type_sinistre, Date_survenance_sinistre, Etat_sinistre      ,
    					  Nom_personne, Prenom_personne
                   FROM sinistres, personne
            	   WHERE personne.Identifiant_personne = sinistres.Identifiant_personne
            	    AND Identifiant_contrat ='$idContrat' 
    				AND sinistres.Identifiant_personne = '$idPersonne'" 
            	   ;

        $aRow =  self::$_oConnexion->query($sQuery);

        return $aRow;
    }
 //liste sinistrer en fonction de l'identifiant d'un contrat et de de l'état du sinistre
    public function sinistre_getListSinistreATransmettre($sCritere)
    {
        $aRow = false;
    	$sQuery = "SELECT  Identifiant_sinistre, Type_sinistre, Date_survenance_sinistre, Etat_sinistre,
    				Identifiant_contrat, Nom_personne, Prenom_personne  
                   FROM sinistres, personne
            	   WHERE personne.Identifiant_personne=sinistres.Identifiant_personne
            	   AND Etat_sinistre='A'
            	  AND Identifiant_contrat="."'$sCritere'" 
            	   ;
        $aRow =  self::$_oConnexion->query($sQuery);

        return $aRow;
    }
    
	public function sinistre_getPrestations()
	{
		$aRow=false;
		$sCritere ="SELECT Identifiant_prestation FROM prestation
		WHERE EXISTS
		(SELECT DISTINCT Identifiant_prestation,Type_sinistre,Date_survenance_sinistre,Nom_personne,Prenom_personne
    				FROM sinistres s, personne p, prestation presta
    				WHERE s.Identifiant_contrat=".$this->_IDENTIFIANT_CONTRAT."
    				AND presta.Identifiant_sinistre = s.Identifiant_sinistre 
    				AND s.Identifiant_personne = p.Identifiant_personne
		";

		if ($sEtatSinistre)
		{
			$sCritere = $sCritere." AND presta.Etat_prestation = '".$this->_ETAT_SINISTRE."')";
		}else
		{
			$sCritere = $sCritere.")";
		}

		$aRow =  self::$_oConnexion->query($sCritere);
		return $aRow[0]['Identifiant_prestation'];

	} 
    
	public function sinistre_getListPrestation($idSinistre, $sEtatPrestation = null)
	{

		$sQuery ="SELECT Identifiant_prestation, Montant_prestation, Type_prestation, Etat_prestation 
				  FROM prestation 
					WHERE Identifiant_sinistre = ".$idSinistre;
		if($sEtatPrestation!=null)
			$sQuery .= " AND Etat_prestation = '".$sEtatPrestation."' ";
					
		$sQuery .= " order by Identifiant_prestation ";
		
		$aRow =  self::$_oConnexion->query($sQuery);
		return $aRow;
	
	} 
    
    //liste sinistre instruit avec acceptation de l'assureur
 	public function sinistre_getListSinistreAcceptAssureur($sCritere)
    {
        $aRow = false;
    	$sQuery = "SELECT *     
                   FROM sinistres
            	   WHERE Etat_sinistre='A' and Identifiant_contrat="."'$sCritere'" 
            	   ;
        $aRow =  self::$_oConnexion->query($sQuery);

        return $aRow;
    }
    
	public function sinistre_isSinistreInstruitWithAcceptAssureur($idSinistre)
    {
    	$sQuery = "SELECT Identifiant_sinistre     
                   FROM sinistres
            	   WHERE Etat_sinistre='I' 
            	   AND Decision_partenaire_sinistre = 'A'
            	   AND Identifiant_sinistre = ".$idSinistre ;
        $aRow =  self::$_oConnexion->query($sQuery);
		if(!empty($aRow)) return true;
        else return false;
    }
    
  	//liste sinistre declarer
 	public function sinistre_getListSinistreDeclare($sCritere)
    {
        $aRow = false;
    	$sQuery = "SELECT *      
                   FROM sinistres
            	   WHERE Etat_sinistre='D' and Identifiant_contrat="."'$sCritere'" 
            	   ;
        $aRow =  self::$_oConnexion->query($sQuery);

        return $aRow;
    }
    
    public function sinistre_getSinistreDeclareSurPersonne($idContrat)
    {

    	$sQuery = "SELECT distinct Identifiant_sinistre, Type_sinistre, Date_survenance_sinistre,
    				p.Identifiant_personne, Nom_personne, Prenom_personne ,
    				Identifiant_role, Type_assure
                   FROM sinistres sin, personne p, role r
            	   WHERE Etat_sinistre = 'D' 
            	   AND sin.Identifiant_contrat = '$idContrat'
            	   AND sin.Identifiant_personne = p.identifiant_personne 
            	   AND r.Identifiant_personne = p.identifiant_personne
            	   AND r.Identifiant_contrat = sin.Identifiant_contrat" ;
        $aRow =  self::$_oConnexion->query($sQuery);

        return $aRow;
    }
    
	public function sinistre_isEtatDeclare($idSinistre)
    {
    	$sQuery = "SELECT Identifiant_sinistre    
                   FROM sinistres
            	   WHERE Etat_sinistre = 'D' 
            	   and Identifiant_sinistre= '".$idSinistre."'"   ;
        $aRow =  self::$_oConnexion->query($sQuery);

        if(!empty($aRow)) return true;
        else return false;
    }
	

    /******************************** Mamadou ***************************/
	
    
    // Règle l'état de la prestation à R et crée un évènement financier, de sous-type règlement sinistre
    public function sinistre_reglePrestation($idPrestation, $idUser, $sDateEvent, $sRefEvent)
    {
    	$bup = false;
    	$bEF = false;
    	$retour  = '';	
    	
    	$sQuery = "UPDATE prestation SET 
				 Etat_prestation  = 'R' 
	    		WHERE Identifiant_prestation 	= ".$idPrestation."
	    		AND Identifiant_sinistre = ".$this->_IDENTIFIANT_SINISTRE ;
    	
    	// Initialisation transaction
    	self::$_oConnexion->beginTransaction();
    	$bup =  self::$_oConnexion->execute($sQuery);
		if($bup)
		{
    	
			    // Création  évènement de type financier, sous-type règlement sinistre
			    	$sQueryEF = "INSERT INTO evenement 
			    	(Type_evenement, Sous_type_evenement, Reference_evenement, Date_evenement,
			    	Identifiant_sinistre, Identifiant_agent, Identifiant_contrat, Identifiant_personne,
			    	Identifiant_prestation)
			    		values (
			    		'F',
			    		'FRS',
			    		'$sRefEvent',
						".self::$_oConnexion->date($sDateEvent)." , 
			    		$this->_IDENTIFIANT_SINISTRE,
			    		$idUser,
			    		$this->_IDENTIFIANT_CONTRAT,
			    		$this->_IDENTIFIANT_PERSONNE,
			    		".$idPrestation."
			    		)";	

			    	$bEF = self::$_oConnexion->execute($sQueryEF);	
			    	
				    if($bEF)
    				{
			    		self::$_oConnexion->commit();
					}
					else
					{
			    		self::$_oConnexion->rollback();// IsARE
					}
			    }
    			else
				{
		    		self::$_oConnexion->rollback();// IsARE
				}
//	echo $sQueryEF;		    
    	$retour = $bup."-".$bEF;
	    return $retour;
    }
	
    
    
    public function sinistre_getTypeJustificatif()
    {
        $aRow = false;
		$sCritere = " SELECT Identifiant_condition_indemnisation,Code_condition_indemnisation,Libelle_condition_indemnisation
    				FROM garantiesouscrite garsous, conditionindemnisation condit
					WHERE garsous.Identifiant_contrat=".$this->_IDENTIFIANT_CONTRAT."
					AND garsous.Identifiant_personne=".$this->_IDENTIFIANT_PERSONNE."
					AND Type_condition_indemnisation='J'";
//					AND garsous.Identifiant_garantie=condit.Identifiant_garantie,
//					AND Applicables à la date d'effet du contrat :
//		Quelles relations entre date_effet_contrat,date_effet_garantie_souscrite, date_debut_condition_indemnisation ...?
  
        $aRow =  self::$_oConnexion->query($sCritere );

        return $aRow;
    }
    /**
     * recupere les types de justificatifs à associer à un sinistre
     *
     * @param int $idContrat
     * @param string date $sDateEffet
     * @return array
     * FS 30-11-2010
     */
	public function sinistre_getListTypeJustificatif($idContrat, $sDateEffet, $sTypeSinistre=null) 
	{
	  	//on recupere les conditions indemnisation de type J associées au contrat récupéré dans la table garantiesouscrite
	  	//(en passant par Id offre ou Id garantie du produit
	  	$sQuery="SELECT distinct  Code_condition_indemnisation, 
			  	Libelle_condition_indemnisation, Valeur_condition_indemnisation
			  	FROM conditionindemnisation ci , garantiesouscrite garsous,
			  		garantie gar, produit p
				WHERE Type_condition_indemnisation = 'J'
				AND garsous.Identifiant_contrat = '".$idContrat."'
				AND garsous.Identifiant_garantie = gar.Identifiant_garantie
			    AND gar.Identifiant_produit = p.Identifiant_produit
			   	AND ( ci.Date_fin_condition_indemnisation >= ".self::$_oConnexion->date($sDateEffet)." 
	  				OR ci.Date_fin_condition_indemnisation is NULL)
	  				AND (ci.Identifiant_offre = p.Identifiant_offre OR ci.Identifiant_offre is NULL) 
				AND ( (ci.Identifiant_garantie = garsous.Identifiant_garantie ";
	  	if($sTypeSinsitre!=null)
			$sQuery .= " AND SUBSTRING(Code_garantie,1,1) = '".$sTypeSinistre."')";
		else $sQuery .= ")";
		
		$sQuery .= " OR ci.Identifiant_garantie is NULL)	";
		
	//AND if(SUBSTRING(Code_garantie,1,1)='D','CD', 'CIN' ) = Code_condition_indemnisation
	  	$aRow =  self::$_oConnexion->query($sQuery);
  
  		return $aRow;
  }
    public function sinistre_creerJustificatif($sTJ,$aVal){
    	$bId = false;
    	$sQuery = "INSERT INTO justificatif (
				Type_justificatif ,
				Valeur_justificatif ,
				Identifiant_contrat ,
				Identifiant_personne ,
				Identifiant_sinistre
    			) values (
				'$sTJ', 
				'$aVal', 
				$this->_IDENTIFIANT_CONTRAT, 
				$this->_IDENTIFIANT_PERSONNE, 
				$this->_IDENTIFIANT_SINISTRE
    			)";
		
        	$bId = self::$_oConnexion->execute($sQuery);
    	return $bId;
    	
    }
    //
    public function sinistre_intervenantIsSouscripteur()
    {
    	$aRow = false;
		$sCritere = "SELECT /* sinistre_intervenantIsSouscripteur*/ * 
					FROM role  
    				WHERE Type_role ='S'
    				AND Identifiant_personne = ".$this->_IDENTIFIANT_PERSONNE."
    				AND Identifiant_contrat = ".$this->_IDENTIFIANT_CONTRAT;
        $aRow =  self::$_oConnexion->query($sCritere);
		if(!empty($aRow))
			return true;
		else return false;
		
	}
    //Récupére les types de prestation
     public function sinistre_getTypeprestation(){
    	$aRow = false;
		$sCritere = "SELECT DISTINCT Type_prestation 
					FROM prestation"; 
    				
        $aRow =  self::$_oConnexion->query($sCritere);

        return $aRow;
		
	}
 //Récupere l'identifiant de la prestation à partir de l'identifiant du sinistre
function sinistre_getIdPrestation($idSinistre)
    {
        $aRow = false;
    	$sQuery = "SELECT Identifiant_prestation  
                   FROM prestation 
            	   WHERE Identifiant_sinistre="."'$idSinistre'" 
            	   ;
        $aRow =  self::$_oConnexion->query($sQuery);

        return $aRow[0]['Identifiant_prestation'];
    }
 //Récupere l'identifiant de la personne à partir de l'identifiant du sinistre
function sinistre_getIdPersonne($idSinistre)
    {
        $aRow = false;
    	$sQuery = "SELECT Identifiant_personne  
                   FROM sinistres 
            	   WHERE Identifiant_sinistre="."'$idSinistre'" 
            	   ;
        $aRow =  self::$_oConnexion->query($sQuery);

        return $aRow[0]['Identifiant_personne'];
    }
	
	//Recupére le montant de la prestation en fonction du type de prestation
public function sinistre_getMontantIndemnisation($idSinistre, $sDateSurvenance, $TypePrestation)
{
 		$sQuery = "SELECT distinct Montant_indemnisation, Type_indemnisation
 					FROM sinistres sin, indemnisation ind, garantiesouscrite garsous
 					WHERE sin.Identifiant_sinistre = '".$idSinistre."'
 					  AND Type_indemnisation = '".$TypePrestation."'
 					  AND sin.Identifiant_contrat = garsous.Identifiant_contrat
 					  AND garsous.Identifiant_garantie = ind.Identifiant_garantie
					  AND garsous.Identifiant_formule = ind.Identifiant_formule
					  AND ( ind.Date_fin_indemnisation >= ".self::$_oConnexion->date($sDateSurvenance)." 
	  						OR ind.Date_fin_indemnisation is NULL)";
    	
        $aRow =  self::$_oConnexion->query($sQuery);
		if(!empty($aRow))
        	return $aRow[0]['Montant_indemnisation'];
        else return 0;
		
	}
	//Récupére les decisions du partenanire
     public function sinistre_getDecision_partenaire(){
    	$aRow = false;
		$sCritere = "SELECT DISTINCT Decision_partenaire_sinistre 
					FROM sinistres"; 
    				
        $aRow =  self::$_oConnexion->query($sCritere);

        return $aRow;
		
	}
//Récupére les motifs de refus d'indemnisation
     public function sinistre_getMotif_refus_Indemnistation(){
    	$aRow = false;
		$sCritere = "SELECT DISTINCT Libelle_condition_indemnisation 
					FROM conditionindemnisation
					WHERE Code_condition_indemnisation 
					IN
					('CAREN','CAUS','DECL','PERSG','PERSI')"; 
    				
        $aRow =  self::$_oConnexion->query($sCritere);

        return $aRow;
		
	}
    //
    public function sinistre_searchGarsousActive(){
    	$aRow = false;
    	$sQuery = "SELECT Code_garantie
    				FROM garantie gar , garantiesouscrite garsous
    				WHERE garsous.Identifiant_personne=".$this->_IDENTIFIANT_PERSONNE."
    				AND garsous.Identifiant_contrat=".$this->_IDENTIFIANT_CONTRAT."
    				AND garsous.Identifiant_garantie = gar.Identifiant_garantie
					AND garsous.Etat_garantie_souscrite = 'A'
    				AND Code_garantie like '".$this->_TYPE_SINISTRE."%'";
    	$aRow =  self::$_oConnexion->query($sQuery);

    	return $aRow;

    }
    
    // Création sinistre avec évènements rattachés, toute la procédure ou rollback
    public function sinistre_insert($aRoles,$GarSous,$idUser)
    {
    	
    	$bIdS = false;
    	$bIdR = false;
    	$bIdG = false;
    	$bIdES = false;
    	$bIdP = false;
    	$bup = false;
    	$bIsR = false;
    	$bIsG = false;
    	$bIsARE = false;

    	$retour  = '';	
    	
    	// Création sinistre
    	$sQuerySinistre = "INSERT INTO sinistres (
    		Type_sinistre ,
			Date_survenance_sinistre ,
			Date_declaration_sinistre ,
			Cause_sinistre ,
			Etat_sinistre ,
			Eligibilite_sinistre ,
			Identifiant_contrat ,
			Identifiant_personne 
    		) values (
			'$this->_TYPE_SINISTRE' ,
			'$this->_DATE_SURVENANCE_SINISTRE' ,
			'$this->_DATE_DECLARATION_SINISTRE' ,
			'$this->_CAUSE_SINISTRE' ,
			'$this->_ETAT_SINISTRE' ,
			'$this->_ELIGIBILITE_SINISTRE' ,
			$this->_IDENTIFIANT_CONTRAT ,
			$this->_IDENTIFIANT_PERSONNE 
    		)";
    	

    	$sQueryP = "UPDATE personne SET Etat_personne = '".$this->_TYPE_SINISTRE."' 
    				WHERE Identifiant_personne = ".$this->_IDENTIFIANT_PERSONNE;

	/*
	 * ****************** Seulement si l'intervenant sinistré est le souscripteur ******************
	 */
		// Modification contrat pour passer l’état à résilié
		$sReq = "UPDATE contrat SET Etat_contrat = 'R' WHERE Identifiant_contrat = ".$this->_IDENTIFIANT_CONTRAT;

	/*
	 *  ******* FIN *********** Seulement si l'intervenant sinistré est le souscripteur ******************
	 */
		
    // Initialisation transaction
   
    self::$_oConnexion->beginTransaction();
        
	$bIdS = self::$_oConnexion->execute($sQuerySinistre);
    if($bIdS)// IdS
    {
    	$bIdR = true;
    	foreach ($aRoles as $i => $aRole)
    	{
    		$asQueries = "UPDATE role SET Etat_role = 'S' 
    						WHERE Identifiant_role = ".$aRole['Identifiant_role']."
    						AND Identifiant_personne = ".$this->_IDENTIFIANT_PERSONNE."
    						AND Identifiant_contrat = ".$this->_IDENTIFIANT_CONTRAT;
    		
    		$bIdR = self::$_oConnexion->execute($asQueries);
    		//on teste si le role n'est pas déja à S
		    $sQuerytmp = "select Etat_role FROM role 
		    			  WHERE Identifiant_role = ".$aRole['Identifiant_role']."
	    			AND Identifiant_personne = ".$this->_IDENTIFIANT_PERSONNE."
	    			AND Identifiant_contrat = ".$this->_IDENTIFIANT_CONTRAT;
		    $aEtat = self::$_oConnexion->query($sQuerytmp);
		    $sEtat = $aEtat[0]['Etat_role'];
		    if($sEtat == 'S') $bIdR = 1;
				    
    		if(!$bIdR)
    			break;
    	}
			if($bIdR)// IdR
			{
				$bIdG = true;
				foreach ($GarSous as $i => $aGS)
				{
				    $asQueriesG = "UPDATE garantiesouscrite SET Etat_garantie_souscrite = 'I' 
				    				WHERE Identifiant_garantie_souscrite = ".$aGS['Identifiant_garantie_souscrite']."
				    				AND Identifiant_personne = ".$this->_IDENTIFIANT_PERSONNE."
    								AND Identifiant_contrat = ".$this->_IDENTIFIANT_CONTRAT;

				    $bIdG = self::$_oConnexion->execute($asQueriesG);
				    //on teste si la garantie n'est pas déja à I
				    $sQuerytmp = "select Etat_garantie_souscrite FROM garantiesouscrite 
				    			  WHERE Identifiant_garantie_souscrite = ".$aGS['Identifiant_garantie_souscrite']."
				    				AND Identifiant_personne = ".$this->_IDENTIFIANT_PERSONNE."
    								AND Identifiant_contrat = ".$this->_IDENTIFIANT_CONTRAT;
				    $aEtat = self::$_oConnexion->query($sQuerytmp);
				    $sEtat = $aEtat[0]['Etat_garantie_souscrite'];
				    if($sEtat == 'I') $bIdG = 1;
				    
				    if(!$bIdG)
	    				break;
				}
				if($bIdG)// IdG
				{
    	// Création  évènement de type sinistre, sous-type déclaration
    	$sQueryES = "INSERT INTO evenement (Type_evenement,Sous_type_evenement,Date_evenement,Identifiant_sinistre,Identifiant_agent,Identifiant_contrat,Identifiant_personne)
    		values (
    		'S',
    		'SD',
			'$this->_DATE_DECLARATION_SINISTRE', 
    		".$bIdS.",
    		$idUser,
    		$this->_IDENTIFIANT_CONTRAT,
    		$this->_IDENTIFIANT_PERSONNE
    		)";
				
			    	$bIdES = self::$_oConnexion->execute($sQueryES);	

			    	if($bIdES)// IdES
			    	{
				    	$bIdP = self::$_oConnexion->execute($sQueryP);	
				    	////on teste si la PERSONNE n'est pas déja à I OU D
					    $sQuerytmp = "select Etat_personne FROM personne 
	    						WHERE Identifiant_personne = ".$this->_IDENTIFIANT_PERSONNE;;
					    $aEtat = self::$_oConnexion->query($sQuerytmp);
					    $sEtat = $aEtat[0]['Etat_personne'];
					    if($sEtat == $this->_TYPE_SINISTRE) $bIdP = 1;
				    	
						if($bIdP)// IdP
						{
							if(!$this->sinistre_intervenantIsSouscripteur()) // 
							{

					    		self::$_oConnexion->commit(); // La transaction débute là si, l'intervenant sinistré n'est pas le souscripteur
					    		
					    		
							}else // Sinon on intègre les points 19,20,21 & 23 avant de lancer la transaction
							{	
								
								// ******* DEBUT  ******** L'intervenant n'est pas le souscripteur **********
								
								$bup = self::$_oConnexion->execute($sReq);
								//$bIsR = self::$_oConnexion->execute($asReqR);
								    		
					    		//on teste si le contrat n'est pas déja résilié
							    $sQuerytmp = "select Etat_contrat FROM contrat  WHERE Identifiant_contrat = ".$this->_IDENTIFIANT_CONTRAT;;
							    $aEtat = self::$_oConnexion->query($sQuerytmp);
							    $sEtat = $aEtat[0]['Etat_contrat'];
							    if($sEtat == 'R') $bup = 1;
								
						    	if($bup)// up, Modification contrat pour passer l’état à résilié
						    	{
						    		$bIsR = true;
							    	foreach ($aRoles as $i => $aRole2)
							    	{
							    		if($aRole2['Identifiant_personne']!=$this->_IDENTIFIANT_PERSONNE)
							    		{
								    		$asReqR = "UPDATE role SET Etat_role = 'I' 
								    						WHERE Identifiant_role = ".$aRole2['Identifiant_role']."
								    						AND Etat_role = 'A'
								    						AND Identifiant_contrat = ".$this->_IDENTIFIANT_CONTRAT;
								    				//		AND Identifiant_personne <> ".$this->_IDENTIFIANT_PERSONNE."
								    		$bIsR = self::$_oConnexion->execute($asReqR);
								    		
								    		//on teste si le role de la personne n'est pas déja à I
										    $sQuerytmp = "select Etat_role FROM role 
										    			  WHERE Identifiant_role = ".$aRole2['Identifiant_role']."
										    				AND Identifiant_contrat = ".$this->_IDENTIFIANT_CONTRAT;
										    $aEtat = self::$_oConnexion->query($sQuerytmp);
										    $sEtat = $aEtat[0]['Etat_role'];
										    if($sEtat == 'I') $bIsR = 1;
							    		}
							    		if(!$bIsR)
							    			break;
							    	}
									if($bIsR) // IsR, Modification de tous les rôles des intervenants actifs pour le passer à inactif
									{
										$bIsG = true;
							    		foreach ($GarSous as $i => $aGS2)
										{
								    		if($aRole2['Identifiant_personne']!=$this->_IDENTIFIANT_PERSONNE)
								    		{
												$asReqG = "UPDATE garantiesouscrite SET Etat_garantie_souscrite = 'I' 
											    				WHERE Identifiant_garantie_souscrite = ".$aGS2['Identifiant_garantie_souscrite']."
																AND Etat_garantie_souscrite = 'A'
								    							AND Identifiant_contrat = ".$this->_IDENTIFIANT_CONTRAT;
											    			//	AND Identifiant_personne <> ".$this->_IDENTIFIANT_PERSONNE."
											    $bIsG = self::$_oConnexion->execute($asReqG);
											    
											    //on teste si la garantiesouscrite n'est pas déja à I
											    $sQuerytmp = "select Etat_garantie_souscrite FROM garantiesouscrite 
											    			 WHERE Identifiant_garantie_souscrite = ".$aGS2['Identifiant_garantie_souscrite']."
											    				AND Identifiant_contrat = ".$this->_IDENTIFIANT_CONTRAT;
											    $aEtat = self::$_oConnexion->query($sQuerytmp);
											    $sEtat = $aEtat[0]['Etat_garantie_souscrite'];
											    if($sEtat == 'I') $bIsG = 1;
								    		}
										    if(!$bIsG)
							    				break;
										}
									
										if($bIsG) // IsG, Modification de toutes les garanties souscrites actives pour passer l’état à inactif
										{
										
		// Création évènement acte de gestion, résiliation suite à sinistre
    	$sReqARE = "INSERT INTO evenement (Type_evenement,Sous_type_evenement, Motif_evenement,Date_evenement,Identifiant_sinistre,Identifiant_agent,Identifiant_contrat,Identifiant_personne)
    			values (
    			'G',
    			'ARE',
    			'S',
				'$this->_DATE_DECLARATION_SINISTRE', 
	    		".$bIdS.",
				$idUser,
    			$this->_IDENTIFIANT_CONTRAT,
    			$this->_IDENTIFIANT_PERSONNE
    			)";
					    		//self::$_oConnexion->commit();
					    		$bIsARE = self::$_oConnexion->execute($sReqARE);
					    		
								if($bIsARE) // IsARE, Création évènement acte de gestion 
								{
						    		self::$_oConnexion->commit();
								}
								else
								{
						    		self::$_oConnexion->rollback();// IsARE
								}
								    		
										}
										else
										{
								    		self::$_oConnexion->rollback();// IsG
										}
						
									}
									else
									{
							    		self::$_oConnexion->rollback();// IsR
							    	}
						    	}
						    	else
						    	{
							    	self::$_oConnexion->rollback();// up
						    	}
								
								// ********   FIN   ******** L'intervenant est le souscripteur **********
							}
						}
						else
						{
				    		self::$_oConnexion->rollback();// IdP
						}
		    		}
		    		else{
			    		self::$_oConnexion->rollback();// IdES
		    		}
		    	}
				else
				{
		    		self::$_oConnexion->rollback();// IdG
				}
			}
			else
			{
	    		self::$_oConnexion->rollback();// IdR
			}
		}
		else
		{
    		self::$_oConnexion->rollback();// IdS
    	}

    	
//	    $retour =	$bIdS."-".$bIdR."-".$bIdG."-".$bIdES."-".$bIdP."-".$bup."-".$bIsR."-".$bIsG."-".$bIsARE;

			if(!$this->sinistre_intervenantIsSouscripteur())  
			{
			    $retour =	$bIdS."-".$bIdR."-".$bIdG."-".$bIdES."-".$bIdP;
			   // echo "<br> cas PAS souscripteur";
			}else 
			{	
				//echo "<br> cas souscripteur";
			    $retour =	$bIdS."-".$bIdR."-".$bIdG."-".$bIdES."-".$bIdP."-".$bup."-".$bIsR."-".$bIsG."-".$bIsARE;
			}
			//echo "<br> retour == ".$retour;
	    return $retour;
	    

    }
    
     /***************************FIN  Mamadou ***************************/
    
    public function sinistre_update()
    {
    	$sQuery ="UPDATE sinistres SET 
	    		Type_sinistre ='$this->_TYPE_SINISTRE' ,
				Date_survenance_sinistre=".self::$_oConnexion->date($this->_DATE_SURVENANCE_SINISTRE)." ,
				Date_declaration_sinistre=".self::$_oConnexion->date($this->_DATE_DECLARATION_SINISTRE)." ,
				Cause_sinistre='$this->_CAUSE_SINISTRE' ,
				Etat_sinistre='$this->_ETAT_SINISTRE' ,
				Eligibilite_sinistre='$this->_ELIGIBILITE_SINISTRE' ,
				Decision_partenaire_sinistre='$this->_DECISION_PARTENAIRE_SINISTRE' ,
				Motif_refus_sinistre='$this->_MOTIF_REFUS_SINISTRE' ,
				Mode_reglement_sinistre='$this->_MODE_REGLEMENT_SINISTRE' ,
				Identifiant_contrat=$this->_IDENTIFIANT_CONTRAT ,
				Identifiant_personne=$this->_IDENTIFIANT_PERSONNE
				WHERE Identifiant_sinistre=".$this->_IDENTIFIANT_SINISTRE ;
    	
    	return self::$_oConnexion->execute($sQuery);
    }
    
public function sinistre_isPrestationExist($idSinistre)
    {
    	$sQuery = "select count(Identifiant_prestation ) as nbPresta
			    	from prestation 
			    	where 	Identifiant_sinistre = '".$idSinistre."'"; 
	    		 
    	
    	$aRow = self::$_oConnexion->execute($sQuery);
    	if(!empty($aRow)) return $aRow[0]['nbPresta'];
    	else return 0;
    }
}
?>